In many computer systems, a collection of services are implemented and individual services in the collection of services act as consumers and/or producers of various types of information. In some implementations, the producers communicate directly with the consumers, but in other implementations interactions between the producers and the consumers are facilitated through the use of a queue structure called a journal. The journal acts as a shared queue that accepts journal entries from one or more producer services (“producer”) and delivers journal entries to one or more compatible consumer services (“consumer”). A journal service maintains the entries in the queue, as well as information that identifies which entries have been processed and which have yet to be processed.
In many journal-based computing systems, the producers and the consumers coordinate interactions with each other so that only a single active producer with a particular role and a single active consumer with a particular role interact with a journal at a time. It is difficult for the producers and the consumers of journal entries to effectively coordinate the selection of an active producer and an active consumer for each role. If a poorly performing active consumer or active producer is selected to process journal entries, overall performance of the journaled system may be substantially impaired.